package woowcrawler.html;

import java.util.ArrayList;


/**
 *
 * @author Leafarneo
 */
public class WoowDocument {
    private String html;
    private Tag root;

    /**
     *
     * @param html A String de conteudo HTML, que será usado nas consultas futuras
     * @throws Exception A Execeção é lançado caso o documento não possua a tag <HTML>
     */
    public WoowDocument(String html) throws Exception{
        this.html=html;
        try{
            root=Tag.FromString(html.substring(html.indexOf("<html")));
        }catch(StringIndexOutOfBoundsException ex){
            throw new Exception("A String passada nao contem a tag <html>");
        }
    }

    public Tag getHtmlElement(){
        return root;
    }

    /**
     * Exemplos de query:
     *
     * "a" - pesquisa pela tag "a"
     * "#titulo" - pesquisa por qualquer tag que tenha como id o valor "titulo"
     * ".css" -  pesquisa por qualquer tag que tenha como class css o valor "css"
     * "[alt=bla bla bla]" - pesquisa por qualquer tag que tenha o atributo "alt" e esse tenha o valor "bla bla bla"
     * "p>b" - pesquisa por qualquer tag "b" que seja descendente de p
     * "#divmain>h1>strong" - pesquisa por qualquer tag "strong" que seja descendente
     *      de uma tag "H1", e que descendente de uma tag com id "divmain"
     * ""
     * 
     * É bem limitado, mas permite a consulta por hierarquia
     *
     *
     *
     * @param query string que contem a query
     * @return lista de Tags
     */
    public Tag[] executeQuery(String query) throws Exception{
        return root.executeQuery(query);
    }

    /**
     *
     * @param regex String contendo a Regex
     * @return conteudo resultado encontrado, ou null caso não encontre nada
     */
    public String getContentCustom(String regex){
        return root.getContentCustom(regex);
    }

}
